# -*- coding: utf-8 -*-
# @Time : 2022/5/23 17:10
import os
import shutil
import xmind
from src.Case.Database.case_data_database import CaseData, CaseDataSchema
from Common.yaml_method import YamlMethod


class ExportCase:
    """
    导出测试用例
    """

    def children(self, data, root_topic):
        """
        使用递归方便，遍历测试用例子节点数据并写入xmind子节点
        :param data: 测试用例数据（除根节点）
        :param root_topic: 当前节点
        :return:
        """
        for key in data:
            # 当前节点内容
            text = key['data']['text']
            write = root_topic.addSubTopic()
            write.setTitle(text)
            # 当前节点的标签内容
            if 'resource' in str(key['data']):
                lable_text = key['data']['resource']
                write.addLabel(lable_text)
            # 子节点内容
            child = key['children']
            if child:
                self.children(child, write)

    def export_case(self, case_name_id):
        """
        导出测试用例
        :param case_name_id: 测试用例名称ID
        :return:
        """
        # 创建或打开一个xmind文件
        file_name = 'case_' + str(case_name_id) + ".xmind"
        workbook = xmind.load(file_name)
        # 获取第一个页签
        s1 = workbook.getPrimarySheet()
        # 设置页签名称
        s1.setTitle("first sheet")

        # 查询数据库中的测试用例数据，并转换成字典格式
        case_data = CaseData.query.filter_by(case_name_id=case_name_id).first()
        case_schema = CaseDataSchema()
        data = case_schema.dump(case_data)
        dic_data = eval(data['text'])

        # 设置根节点，并写入根节点内容
        root = dic_data['root']['data']['text']
        r1 = s1.getRootTopic()
        r1.setTitle(root)
        # 设置子节点，并写入子节点内容
        children_data = dic_data['root']['children']
        self.children(children_data, r1)

        target_directory = '/data/tp_web/exportCase'
        target_path = os.path.join(target_directory, file_name)

        # 确保目标目录存在
        if not os.path.exists(target_directory):
            os.makedirs(target_directory)

        # 检查目标目录中是否存在同名文件，如果存在则删除
        if os.path.exists(target_path):
            os.remove(target_path)

        # 保存xmind文件
        xmind.save(workbook)

        # 将文件移动到指定目录
        shutil.move(file_name, target_directory)

        # 接口响应信息
        code = YamlMethod().read_data('code.yaml')['code']
        res = {
            'code': code[0],
            'message': 'success',
            'data': {
                'fileName': file_name
            }
        }
        return res

